package o2o.utils;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.jinyou.utils.common.DateUtils;
import com.jinyou.utils.common.JYFileUtils;
import com.jinyou.utils.common.ValidateUtil;
import com.jinyou.utils.oss.OssConfigConstants;
import com.jinyouapp.common.utils.image.FileStoryInfo;
import com.jinyouapp.common.utils.image.ImageUtils;
import com.jinyouapp.common.utils.media.aliyun.AliOSSConfig;
import o2o.config.init.AutoWiredClass;
import o2o.system.data.SYS_CONFIG_PATH;
import org.apache.http.entity.ContentType;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import pay.config.WeixinConfig;
import wx.dao.AccessToken;
import wx.utils.WeixinUtil;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;

import static com.google.zxing.client.j2se.MatrixToImageConfig.BLACK;
import static com.google.zxing.client.j2se.MatrixToImageConfig.WHITE;

public class MergerQrImageUtils {
    public static void generateCode(String codeUrl, Integer userId, String textStr) {
        Font font = new Font("微软雅黑", Font.PLAIN, 30);// 添加字体的属性设置

        String imgName = "D:/qrimg/" + DateUtils.getCurrTime() + ".png";
        try {
            // 加载本地图片
            String imageLocalUrl = "D:/qrimg/fxTem01.png";
//            String imageLocalUrl2 = "D:/qrimg/122.png";
            BufferedImage imageLocal = ImageIO.read(new File(imageLocalUrl));
//            BufferedImage imageLocal2 = ImageIO.read(new File(imageLocalUrl2));
            // 加载用户的二维码
//            BufferedImage imageCode = ImageIO.read(new URL(codeUrl));


            int width = 160;
            int height = 160;
            String contents = "www.baidu.com";
            BitMatrix bm = null;
            try {
                bm = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height);
            } catch (WriterException e) {
                e.printStackTrace();
            }

            BufferedImage rqImage = null;
            if (null != bm) {
                rqImage = toBufferedImage(bm);
            }


            // 以本地图片为模板
            Graphics2D g = imageLocal.createGraphics();
            // 在模板上添加用户二维码(地址,左边距,上边距,图片宽度,图片高度,未知)
//            g.drawImage(imageLocal2, 575, imageLocal.getHeight() - 500, 350, 350, null);
            g.drawImage(rqImage, 275, imageLocal.getHeight() - 500, 150, 150, null);
            // 设置文本样式
            g.setFont(font);
            g.setColor(Color.BLACK);
            // 截取用户名称的最后一个字符
//            String lastChar = textStr.substring(textStr.length() - 1);
            // 拼接新的用户名称
//            String newUserName = textStr.substring(0, 1) + "**" + lastChar + " 的邀请二维码";
            // 添加用户名称
            g.drawString(textStr, 200, imageLocal.getHeight() - 530);
            // 完成模板修改
            g.dispose();
            // 获取新文件的地址
            File outputfile = new File(imgName);
            // 生成新的合成过的用户二维码并写入新图片
            ImageIO.write(imageLocal, "png", outputfile);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }


    public static String generateImg(String qrFilePath, String templateFilePath, String title, String slogan, String name) {
        if (ValidateUtil.isNull(qrFilePath) || ValidateUtil.isNull(templateFilePath)) {
            return null;
        }

        JYFileUtils.FilePath fp = JYFileUtils.getFile(SYS_CONFIG_PATH.USER_IMAGE, DateUtils.getCurrTime() + ".png");
        if (null == fp) {
            return null;
        }

//        String targetImgFullPath = "D:/qrimg/" + DateUtils.getCurrTime() + ".png";
        try {
            File file1 = new File(templateFilePath);
            if (null == file1) {
                System.out.println("分销生成图片模板未找到");
                return null;
            }
            File file2 = new File(qrFilePath);
            if (null == file2) {
                System.out.println("分销生成图片二维码未找到");
                return null;
            }
            // 加载本地图片
            BufferedImage tpImageLocal = ImageIO.read(file1);//模板
            BufferedImage qrImageLocal = ImageIO.read(file2);//二维码

            // 二维码
            Graphics2D g = tpImageLocal.createGraphics();
            // 在模板上添加用户二维码(地址,左边距,上边距,图片宽度,图片高度,未知)
            g.drawImage(qrImageLocal, 160, 540, 400, 400, null);

            //标题
            if (ValidateUtil.isNotNull(title)) {
                // 设置文本样式
                Font font2 = new Font("微软雅黑", Font.PLAIN, 40);// 添加字体的属性设置
                g.setFont(font2);
                g.setColor(Color.white);
                // 添加用户名称
                g.drawString(title, 320, 260);
            }

            //slogan
            if (ValidateUtil.isNotNull(slogan)) {
                // 设置文本样式
                Font font = new Font("微软雅黑", Font.PLAIN, 20);// 添加字体的属性设置
                g.setFont(font);
                g.setColor(Color.orange);
                // 添加用户名称
                g.drawString(slogan, 200, 310);
            }

            //名字
            if (ValidateUtil.isNotNull(name)) {
                // 设置文本样式
                Font font = new Font("微软雅黑", Font.PLAIN, 30);// 添加字体的属性设置
                g.setFont(font);
                g.setColor(Color.BLACK);
                // 添加用户名称
                g.drawString(name, 320, 1100);
            }

            //技术支持
            // 设置文本样式
            Font font = new Font("微软雅黑", Font.PLAIN, 10);// 添加字体的属性设置
            g.setFont(font);
            g.setColor(Color.lightGray);
            // 添加用户名称
            g.drawString("技术支持：山东金优网络科技有限公司", 290, tpImageLocal.getHeight() - 30);

            // 完成模板修改
            g.dispose();
            // 获取新文件的地址
            String filePath = fp.fileFullPath;
            File outputfile = new File(filePath);
            // 生成新的合成过的用户二维码并写入新图片
            ImageIO.write(tpImageLocal, "png", outputfile);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return SYS_CONFIG_PATH.IMAGE_BASE_URL + fp.dbFileFullPath;

    }

    public static BufferedImage toBufferedImage(BitMatrix matrix) {
        int width = matrix.getWidth();
        int height = matrix.getHeight();
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                image.setRGB(x, y, (matrix.get(x, y) ? BLACK : WHITE));
//              image.setRGB(x, y,  (matrix.get(x, y) ? Color.YELLOW.getRGB() : Color.CYAN.getRGB()));
            }
        }
        return image;
    }


    public static String generateImgAsm(String qrFilePath, String templateFilePath, String title, String price, String goodsName, String slogan, String name) {
        if (ValidateUtil.isNull(qrFilePath) || ValidateUtil.isNull(templateFilePath)) {
            return null;
        }

        JYFileUtils.FilePath fp = JYFileUtils.getFile(SYS_CONFIG_PATH.USER_IMAGE, DateUtils.getCurrTime() + ".png");
        if (null == fp) {
            return null;
        }

//        String targetImgFullPath = "D:/qrimg/" + DateUtils.getCurrTime() + ".png";
        try {
            File file1 = new File(templateFilePath);
            if (null == file1) {
                System.out.println("分销生成图片模板未找到");
                return null;
            }
            File file2 = new File(qrFilePath);
            if (null == file2) {
                System.out.println("分销生成图片二维码未找到");
                return null;
            }
            // 加载本地图片
            BufferedImage tpImageLocal = ImageIO.read(file1);//模板
            BufferedImage qrImageLocal = ImageIO.read(file2);//二维码

            // 二维码
            Graphics2D g = tpImageLocal.createGraphics();
            // 在模板上添加用户二维码(地址,左边距,上边距,图片宽度,图片高度,未知)
            g.drawImage(qrImageLocal, 280, 1113, 190, 190, null);


            // 商品图片
            BufferedImage qrImageLocal2 = ImageIO.read(new File("D:\\qrimg\\user\\rqqq.jpg"));//头像
            // 在模板上添加用户二维码(地址,左边距,上边距,图片宽度,图片高度,未知)
            g.drawImage(qrImageLocal2, 110, 255, 530, 530, null);

            //价格
            if (ValidateUtil.isNotNull(price)) {
                // 设置文本样式
                Font font2 = new Font("微软雅黑", Font.PLAIN, 80);// 添加字体的属性设置
                g.setFont(font2);
                g.setColor(Color.white);
                // 添加用户名称
                g.drawString(price, 196, 1025);
            }

            //商品名称
            if (ValidateUtil.isNotNull(goodsName)) {
                // 设置文本样式
                Font font2 = new Font("微软雅黑", Font.PLAIN, 30);// 添加字体的属性设置
                g.setFont(font2);
                g.setColor(Color.white);
                // 添加用户名称
                g.drawString(goodsName, 130, 840);
            }


            //标题
//            if (ValidateUtil.isNotNull(title)) {
//                // 设置文本样式
//                Font font2 = new Font("微软雅黑", Font.PLAIN, 40);// 添加字体的属性设置
//                g.setFont(font2);
//                g.setColor(Color.white);
//                // 添加用户名称
//                g.drawString(title, 320, 260);
//            }
//
//            //slogan
//            if (ValidateUtil.isNotNull(slogan)) {
//                // 设置文本样式
//                Font font = new Font("微软雅黑", Font.PLAIN, 20);// 添加字体的属性设置
//                g.setFont(font);
//                g.setColor(Color.orange);
//                // 添加用户名称
//                g.drawString(slogan, 200, 310);
//            }

            //名字
//            if (ValidateUtil.isNotNull(name)) {
//                // 设置文本样式
//                Font font = new Font("微软雅黑", Font.PLAIN, 30);// 添加字体的属性设置
//                g.setFont(font);
//                g.setColor(Color.BLACK);
//                // 添加用户名称
//                g.drawString(name, 320, 1100);
//            }

            //技术支持
//            // 设置文本样式
//            Font font = new Font("微软雅黑", Font.PLAIN, 10);// 添加字体的属性设置
//            g.setFont(font);
//            g.setColor(Color.lightGray);
//            // 添加用户名称
//            g.drawString("技术支持：山东金优网络科技有限公司", 290, tpImageLocal.getHeight() - 30);

            // 完成模板修改
            g.dispose();
            // 获取新文件的地址
            String filePath = fp.fileFullPath;
            File outputfile = new File(filePath);
            // 生成新的合成过的用户二维码并写入新图片
            ImageIO.write(tpImageLocal, "png", outputfile);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return SYS_CONFIG_PATH.IMAGE_BASE_URL + fp.dbFileFullPath;

    }


    // warning: 由于linux下没有微软的字体 需要将微软的字体上传到linux系统上 参考博客 https://blog.csdn.net/weixin_39917216/article/details/81698284
    public static String generateImg(String templateFilePath, List<MergerQrImageBean> list) {
        if (ValidateUtil.isNull(templateFilePath)) {
            return null;
        }

        JYFileUtils.FilePath fp = JYFileUtils.getFile(SYS_CONFIG_PATH.USER_IMAGE, DateUtils.getCurrTime() + ".png");
        if (null == fp) {
            return null;
        }

//        String targetImgFullPath = "D:/qrimg/" + DateUtils.getCurrTime() + ".png";
        try {
            File file1 = new File(templateFilePath);
            if (null == file1) {
                System.out.println("分销生成图片模板未找到");
                return null;
            }
//            File file2 = new File(qrFilePath);
//            if (null == file2) {
//                System.out.println("分销生成图片二维码未找到");
//                return null;
//            }
            // 加载本地图片
//            BufferedImage tpImageLocal = ImageIO.read(file1);//模板
            BufferedImage tpImageLocal = null;
            if (OssConfigConstants.isUse) {
//                System.out.println("iss2");
//                String imgPath = AutoWiredClass.configProperties2.getShareImgUrl();
//                try {
//                    ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
//                    Resource resource = resolver.getResource("classpath:imgs/share_goods_template.jpg");
//                    tpImageLocal = ImageIO.read(resource.getFile());//模板
//                } catch (Exception e) {
//                    e.printStackTrace();
//                    // 图片不存在，需要下载
//                    download(imgPath);
//                }
//                if (null == tpImageLocal) {
//                    System.out.println("还是用远程的");
//                    //                String imgPath = AutoWiredClass.configProperties2.getShareImgUrl();
//                    if (ValidateUtil.isNotNull(imgPath)) {
//                        URL urlR = new URL(imgPath);
//                        tpImageLocal = (BufferedImage) ImageIO.read(urlR);
//                    }
//                }

                String imgPath = AutoWiredClass.configProperties2.getShareImgUrl();
                if (ValidateUtil.isNotNull(imgPath)) {
                    URL urlR = new URL(imgPath);
                    tpImageLocal = (BufferedImage) ImageIO.read(urlR);
                }
            } else {
                tpImageLocal = ImageIO.read(file1);//模板
            }

//            BufferedImage qrImageLocal = ImageIO.read(file2);//二维码

            // 二维码
            Graphics2D g = tpImageLocal.createGraphics();
            // 在模板上添加用户二维码(地址,左边距,上边距,图片宽度,图片高度,未知)
//            g.drawImage(qrImageLocal, 280, 1113, 190, 190, null);


            //
            if (ValidateUtil.isAbsList(list)) {
                for (int i = 0; i < list.size(); i++) {
                    MergerQrImageBean bean = list.get(i);
                    if (null == bean) {
                        continue;
                    }
                    if (ValidateUtil.isNull(bean.getType()) || ValidateUtil.isNull(bean.getName())) {
                        continue;
                    }
                    switch (bean.getType()) {
                        case MERGER_IMAGE_TYPE.IMAGE: {//图片
                            String imgPath = bean.getName();
                            BufferedImage bufferedImage = null;
                            if (OssConfigConstants.isUse) {
                                if (null != bean.getBufferedImage()) {
                                    //
                                    bufferedImage = bean.getBufferedImage();
                                } else {
                                    //
                                    if (ValidateUtil.isNetUrl(imgPath)) {
                                        URL url = new URL(imgPath);
                                        bufferedImage = (BufferedImage) ImageIO.read(url);
                                    } else {
                                        File file = new File(imgPath);
                                        if (null == file) {
                                            continue;
                                        }
                                        bufferedImage = ImageIO.read(file);
                                    }
                                }
                            } else {
                                if (ValidateUtil.isNetUrl(imgPath)) {
                                    imgPath = imgPath.replace(SYS_CONFIG_PATH.IMAGE_BASE_URL, "");
                                }
                                File file = new File(imgPath);
                                if (null == file) {
                                    continue;
                                }
                                bufferedImage = ImageIO.read(file);
                            }

                            if (null == bufferedImage) {
                                continue;
                            }
                            // 在模板上添加图片(地址,左边距,上边距,图片宽度,图片高度,未知)
                            g.drawImage(bufferedImage, bean.getX(), bean.getY(), bean.getWidth(), bean.getHeight(), null);
                        }
                        break;
                        case MERGER_IMAGE_TYPE.TXT: {//文字
                            //文字乱码  参考https://blog.csdn.net/itdragons/article/details/72625041
                            Font font2 = new Font("宋体", Font.PLAIN, bean.getFontSize());// 添加字体的属性设置
                            g.setFont(font2);
                            if (null != bean.getFontColor()) {
                                g.setColor(bean.getFontColor());
                            }
                            String word = bean.getName();
//                            if (bean.getWidth() > 0) {
//                                int len = getWordCount(word);
//                                if (len > bean.getWidth()) {
//                                    word = word.substring(0, bean.getWidth()) + "...";
//                                }
//                            }
                            if (bean.getWidth() > 0) {
//                                if (getWordCount(word) > bean.getWidth()) {
//                                    word = substring(word, bean.getWidth() * 2 - 1) + "...";
//                                }
                                int wordCount = getWordCount(word);
                                if (wordCount > bean.getWidth()) {
                                    if (wordCount >= bean.getWidth() * 2 - 1) {
                                        word = substring(word, bean.getWidth() * 2 - 1) + "...";
                                    } else {
                                        word = substring(word, wordCount - 1) + "...";
                                    }
                                }
                            }
                            // 添加用户名称
                            g.drawString(word, bean.getX(), bean.getY());
                        }
                        break;
                    }
                }
            }


            // 商品图片
//            BufferedImage qrImageLocal2 = ImageIO.read(new File("D:\\qrimg\\user\\rqqq.jpg"));//头像
//            // 在模板上添加用户二维码(地址,左边距,上边距,图片宽度,图片高度,未知)
//            g.drawImage(qrImageLocal2, 110, 255, 530, 530, null);

//            //价格
//            if (ValidateUtil.isNotNull(price)) {
//                // 设置文本样式
//                Font font2 = new Font("微软雅黑", Font.PLAIN, 80);// 添加字体的属性设置
//                g.setFont(font2);
//                g.setColor(Color.white);
//                // 添加用户名称
//                g.drawString(price, 196, 1025);
//            }
//
//            //商品名称
//            if (ValidateUtil.isNotNull(goodsName)) {
//                // 设置文本样式
//                Font font2 = new Font("微软雅黑", Font.PLAIN, 30);// 添加字体的属性设置
//                g.setFont(font2);
//                g.setColor(Color.white);
//                // 添加用户名称
//                g.drawString(goodsName, 130, 840);
//            }


            //标题
//            if (ValidateUtil.isNotNull(title)) {
//                // 设置文本样式
//                Font font2 = new Font("微软雅黑", Font.PLAIN, 40);// 添加字体的属性设置
//                g.setFont(font2);
//                g.setColor(Color.white);
//                // 添加用户名称
//                g.drawString(title, 320, 260);
//            }
//
//            //slogan
//            if (ValidateUtil.isNotNull(slogan)) {
//                // 设置文本样式
//                Font font = new Font("微软雅黑", Font.PLAIN, 20);// 添加字体的属性设置
//                g.setFont(font);
//                g.setColor(Color.orange);
//                // 添加用户名称
//                g.drawString(slogan, 200, 310);
//            }

            //名字
//            if (ValidateUtil.isNotNull(name)) {
//                // 设置文本样式
//                Font font = new Font("微软雅黑", Font.PLAIN, 30);// 添加字体的属性设置
//                g.setFont(font);
//                g.setColor(Color.BLACK);
//                // 添加用户名称
//                g.drawString(name, 320, 1100);
//            }

            //技术支持
//            // 设置文本样式
//            Font font = new Font("微软雅黑", Font.PLAIN, 10);// 添加字体的属性设置
//            g.setFont(font);
//            g.setColor(Color.lightGray);
//            // 添加用户名称
//            g.drawString("技术支持：山东金优网络科技有限公司", 290, tpImageLocal.getHeight() - 30);

            // 完成模板修改
            g.dispose();
            // 获取新文件的地址
            String filePath = fp.fileFullPath;
            File outputfile = new File(filePath);
            // 生成新的合成过的用户二维码并写入新图片
            ImageIO.write(tpImageLocal, "png", outputfile);


            // 如果是使用的oss,那么将图片上传至oss
            if (OssConfigConstants.isUse) {
                FileStoryInfo fileStoryInfo = null;
                String folder = SYS_CONFIG_PATH.USER_IMAGE;
                if (ValidateUtil.isNotNull(folder) && !folder.endsWith("/")) {
                    folder = folder + "/";
                }


//                File file = new File(filePath);
                FileInputStream fileInputStream = new FileInputStream(outputfile);
                // MockMultipartFile(String name, @Nullable String originalFilename, @Nullable String contentType, InputStream contentStream)
                // 其中originalFilename,String contentType 旧名字，类型  可为空
                // ContentType.APPLICATION_OCTET_STREAM.toString() 需要使用HttpClient的包
                MultipartFile multipartFile = new MockMultipartFile("copy" + outputfile.getName(), outputfile.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);

                try {
                    fileStoryInfo = ImageUtils.saveImage2Oss(null, getAliOssConfig(), multipartFile, folder, false);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                String path = fileStoryInfo == null ? null : fileStoryInfo.getUrl();
                if (ValidateUtil.isNull(path)) {
                    return path;
                }
                if (ValidateUtil.isNotNull(OssConfigConstants.IMAGEBASEURL)) {
                    if (ValidateUtil.isNotNull(folder)) {
                        path = path.substring(path.indexOf(folder));
                    } else {
                        path = path.contains("/") ? path.substring(path.lastIndexOf("/")) : path;
                    }
                    path = OssConfigConstants.IMAGEBASEURL + path;
                }
                return path;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return SYS_CONFIG_PATH.IMAGE_BASE_URL + fp.dbFileFullPath;

    }

    private static AliOSSConfig getAliOssConfig() {
        return new AliOSSConfig(OssConfigConstants.ENDPOINT, OssConfigConstants.BUCKETNAME, OssConfigConstants.ACCESSKEYID, OssConfigConstants.ACCESSKEYSECRET);
    }

    public static void main(String[] args) {
//        if (ValidateUtil.isNull(WeixinConfig.xcxAppId) || ValidateUtil.isNull(WeixinConfig.xcxAppSecret)) {
//            System.out.println("配置错误");
//        }
//        AccessToken at = WeixinUtil.getAccessToken(WeixinConfig.xcxAppId, WeixinConfig.xcxAppSecret);
////        String url =  WeixinUtil.getXcxQrCode(at.getToken(), "pages/shareRegist/shareRegist", "15666371607");
//        String filePath = WeixinUtil.getXcxQrCodeFilePath(at.getToken(), "pages/shareReg/shareReg", "");
//        String templateFilePath = "D:/qrimg/fxTem01.png";
//
////        generateCode("https://avatar.csdn.net/E/D/9/3_hu_yanke.jpg", 1, "你好");
////        String url = generateImgAsm(SYS_CONFIG_PATH.IMAGE_BASE_FILE + filePath, templateFilePath, "奇惠购", "999.99", "鲁花5s压榨花生油", "分享赚佣金，吃喝玩乐都在这", "朱文祥");
////        System.out.println(url);
//
//        //商品图片
//        MergerQrImageBean goodsImg = new MergerQrImageBean(MERGER_IMAGE_TYPE.IMAGE, "D:\\qrimg\\user\\rqqq.jpg",
//                null, 0,
//                110, 255, 530, 530);
//
//        MergerQrImageBean price = new MergerQrImageBean(MERGER_IMAGE_TYPE.TXT, "10200.00",
//                Color.white, 80,
//                196, 1025, 10, 0);
//
//        MergerQrImageBean goodsName = new MergerQrImageBean(MERGER_IMAGE_TYPE.TXT, "美度（MIDO）瑞士手表 Multifort 舵手系列 天文台认证硅游丝长动能全自动机械男士腕表M038.431.37.051.00",
//                Color.white, 30,
//                130, 840, 16, 0);
//        MergerQrImageBean qr = new MergerQrImageBean(MERGER_IMAGE_TYPE.IMAGE, SYS_CONFIG_PATH.IMAGE_BASE_FILE + filePath,
//                Color.white, 0,
//                280, 1113, 190, 190);
//
//        List<MergerQrImageBean> list = new ArrayList<MergerQrImageBean>();
//        list.add(goodsImg);
//        list.add(price);
//        list.add(goodsName);
//        list.add(qr);
//        generateImg(templateFilePath, list);

    }

    public static int getWordCount(String s) {
        int length = 0;

        String chinese = "[\u4e00-\u9fa5]";
        for (int i = 0; i < s.length(); i++) {
            String temp = s.substring(i, i + 1);
            if (temp.matches(chinese)) {
                length += 2;
            } else {
                length += 1;
            }
        }
        return length;
    }

    /**
     * 按字节截取字符串
     *
     * @param orignal 原始字符串
     * @param count   截取位数
     * @return 截取后的字符串
     * @throws UnsupportedEncodingException 使用了JAVA不支持的编码格式
     */
    public static String substring(String orignal, int count)
            throws UnsupportedEncodingException {
        // 原始字符不为null，也不是空字符串
        if (orignal != null && !"".equals(orignal)) {
            // 将原始字符串转换为GBK编码格式
            orignal = new String(orignal.getBytes(), "UTF-8");//
            // System.out.println(orignal);
            //System.out.println(orignal.getBytes().length);
            // 要截取的字节数大于0，且小于原始字符串的字节数
            if (count > 0 && count < orignal.getBytes("UTF-8").length) {
                StringBuffer buff = new StringBuffer();
                char c;
                for (int i = 0; i < count; i++) {
                    c = orignal.charAt(i);
                    buff.append(c);
                    if (isChineseChar(c)) {
                        // 遇到中文汉字，截取字节总数减1
                        --count;
                    }
                }
                return new String(buff.toString().getBytes(), "UTF-8");
            }
        }
        return orignal;
    }

    /**
     * 判断是否是一个中文汉字
     *
     * @param c 字符
     * @return true表示是中文汉字，false表示是英文字母
     * @throws UnsupportedEncodingException 使用了JAVA不支持的编码格式
     */
    public static boolean isChineseChar(char c)
            throws UnsupportedEncodingException {
        // 如果字节数大于1，是汉字
        // 以这种方式区别英文字母和中文汉字并不是十分严谨，但在这个题目中，这样判断已经足够了
        return String.valueOf(c).getBytes("UTF-8").length > 1;
    }

    //java 通过url下载图片保存到本地
    public static void download(String urlString) throws Exception {
        if (ValidateUtil.isNull(urlString)) {
            return;
        }
        // 构造URL
        URL url = new URL(urlString);
        // 打开连接
        URLConnection con = url.openConnection();
        // 输入流
        InputStream is = con.getInputStream();
        // 1K的数据缓冲
        byte[] bs = new byte[1024];
        // 读取到的数据长度
        int len;

        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource resource = resolver.getResource("classpath:imgs/share_goods_template.jpg");
//        tpImageLocal = ImageIO.read(resource.getFile());//模板
//        // 输出的文件流
//        String filename = "D:\\图片下载/" + i + ".jpg";  //下载路径及下载图片名称
        File file = resource.getFile();
        FileOutputStream os = new FileOutputStream(file, true);
        // 开始读取
        while ((len = is.read(bs)) != -1) {
            os.write(bs, 0, len);
        }
//        System.out.println(i);
        // 完毕，关闭所有链接
        os.close();
        is.close();
    }
}
